package com.smart.community.region.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.community.region.entity.PropertyHouseType;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 物业公司户型表Mapper接口
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
@Mapper
public interface PropertyHouseTypeMapper extends BaseMapper<PropertyHouseType> {

    /**
     * 根据物业公司ID查询户型列表
     * 
     * @param propertyCompanyId 物业公司ID
     * @return 户型列表
     */
    List<PropertyHouseType> selectByPropertyCompanyId(@Param("propertyCompanyId") Long propertyCompanyId);

    /**
     * 根据物业公司ID列表查询户型列表
     * 
     * @param propertyCompanyIds 物业公司ID列表
     * @return 户型列表
     */
    List<PropertyHouseType> selectByPropertyCompanyIds(@Param("propertyCompanyIds") List<Long> propertyCompanyIds);

    /**
     * 分页查询户型列表
     * 
     * @param page 分页参数
     * @param propertyCompanyId 物业公司ID
     * @param houseTypeName 户型名称（模糊查询）
     * @param totalAreaMin 建筑面积最小值
     * @param totalAreaMax 建筑面积最大值
     * @param bedroomCount 卧室数量
     * @param orientation 朝向
     * @param status 状态
     * @return 分页结果
     */
    IPage<PropertyHouseType> selectPage(Page<PropertyHouseType> page,
                                       @Param("propertyCompanyId") Long propertyCompanyId,
                                       @Param("houseTypeName") String houseTypeName,
                                       @Param("totalAreaMin") java.math.BigDecimal totalAreaMin,
                                       @Param("totalAreaMax") java.math.BigDecimal totalAreaMax,
                                       @Param("bedroomCount") Integer bedroomCount,
                                       @Param("orientation") String orientation,
                                       @Param("status") Integer status);

    /**
     * 检查户型名称是否已存在
     * 
     * @param houseTypeName 户型名称
     * @param propertyCompanyId 物业公司ID
     * @param excludeId 排除的ID（用于更新时检查）
     * @return 是否存在
     */
    boolean checkHouseTypeNameExists(@Param("houseTypeName") String houseTypeName,
                                    @Param("propertyCompanyId") Long propertyCompanyId,
                                    @Param("excludeId") Long excludeId);

    /**
     * 批量删除户型
     * 
     * @param ids 户型ID列表
     * @return 删除数量
     */
    int deleteBatchIds(@Param("ids") List<Long> ids);

    /**
     * 更新户型状态
     * 
     * @param id 户型ID
     * @param status 状态
     * @return 更新数量
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
}
